This invention is directed to managing the interaction between a peripheral device such as a printer, an external disk drive, or a networked appliance and a computer to which it is coupled. In particular, the present invention uses a generic software to interpret static information stored at the device to enable the device to communicate with the computer, with other devices, and with remote sites with which it may communicate through a network.
As used herein, a xe2x80x9cdevicexe2x80x9d is hardware (that can include software) that provides some useful functionality when coupled to a computer. Examples of a device include a printer, a scanner, a modem, a home security system, a television, a light switch and a telephone. In the process of providing useful functionality, the device communicates with the computer, and/or with other devices also coupled to the same or another computer, and/or with remote sites with which the device is coupled, e.g., through a network. As used herein, the term xe2x80x9ccoupledxe2x80x9d means directly or indirectly connected. Thus, A is coupled to B is A is directly connected to B. A is also coupled to B if A is directly connected to C, and C is directly connected to B.
One type of computer includes a microprocessor, such as the Pentium III microprocessor manufactured by the Intel Corporation of Santa Clara, California; a memory, such as read only memory (ROM), random access memory (RAM), a hard disk, etc., or any combination thereof; and a port through which the microprocessor communicates with the device and/or other sites (e.g., through a network). Examples of a computer include a Dell XPS T microcomputer and an Apple Macintosh computer. Another type of computer includes an Application Specific Integrated Circuit (ASIC) that is designed in hardware and firmware to perform certain specific tasks. An example of an ASIC is a digital signal processor.
A remote site can include a device and/or a computer. A device communicates with another entity (computer, other device, remote site) that executes a software application. Examples of software applications include a word processor, a home automation software package, a telecommunications software package, an Internet telephone program, a home intrusion detection and prevention program, and a control program for a television. When an application calls for functionality provided by a device, the application can send a message to the device, e.g., requesting a service (xe2x80x9cturn on the lightxe2x80x9d, xe2x80x9calert the police departmentxe2x80x9d, xe2x80x9cprint this documentxe2x80x9d, etc.) The device can send also send a message to the application, e.g., xe2x80x9cI am readyxe2x80x9d, xe2x80x9csend the documentxe2x80x9d, xe2x80x9cthe light has been turned onxe2x80x9d, etc. Thus, an application and a device can communicate with each other, provided the computer on which the application is run and the device are somehow coupled. In many cases, the application and the device communicate with each other through an operating system, such as the LINUX operating system (described at  less than www.linux.com greater than , visited Jul. 8, 1999), or the Windows 98 operating system made by the Microsoft Corporation. The operating system is an xe2x80x9cintermediate applicationxe2x80x9d that operates between the device and the xe2x80x9cend applicationxe2x80x9d that provides the ultimate functionality to the user, e.g., a word processing program, a home device control program, etc. As used herein, the term xe2x80x9capplicationxe2x80x9d can refer to either an intermediate application, such as an operating system, or to an end application.
Computers, applications and devices are often not manufactured by the same entity. Devices made by different manufacturers have distinct command sets for providing services. Thus, printers made by different manufacturers can have different command sets for receiving and printing a document from an application. Likewise, applications from different manufacturers can send requests for services to devices in different formats. For example, one word processor can send a document to a printer in a first format, while a second word processor made by a different manufacturer can send a document with the same content to a printer in an entirely different format. In short, different applications xe2x80x9cspeakxe2x80x9d different languages, and different devices also xe2x80x9cspeakxe2x80x9d different languages. Thus, communication between applications and devices can be problematic.
A known solution to this problem is to use a piece of software called a xe2x80x9cdriverxe2x80x9d to translate communications from a given application to a format that can be understood by a particular device, and vice versa. For example, a printer driver is made that translates print commands between the WordPerfect word processor, made by the Corel Corporation, and the Hewlett Packard Deskjet 520 color printer, made by the Hewlett Packard company. Typically, a driver is specific to the computer and operating system with which the device is to be used.
The diversity in both applications and devices has resulted in the proliferation of drivers, making it more complex and difficult to properly distribute and maintain them. A known distribution model is to include every driver a user may conceivably require at any time along with the operating system that is included with a computer when it is shipped to a user. This is inefficient, as it almost invariably means including thousands of drivers that the user does not and will never need. It is also practically impossible to include a complete set, because there is an unavoidable lag between the time a new device becomes available and the operating system manufacturer becomes aware of it, receives the appropriate drivers, and is able to include them in with the operating system. Thus, the user is faced with the prospect of not having available a driver for a new device she couples to her computer. Likewise, the problem of getting new drivers that are produced after the computer is shipped to the user persists. Periodic updates (e.g., over the Internet) are possible, but cumbersome and inefficient.
Drivers can become outdated. Just like most software, improvements can be made to a driver, and successive versions can be released by the device manufacturer. Distributing these to users can be logistically difficult, if not impossible, as the manufacturer has no mechanism for easily distributing updated drivers after the device is purchased. One known solution to this problem is to include special installation software for a particular device on a computer that would automatically execute when it detected that the device was coupled to the computer. The special installation software includes information about the computer and about the device, and installs the correct driver (and possibly other applications) automatically, in some cases fetching them from a remote site over the Internet. In one embodiment, the special installation software uses a Uniform Resource Locator stored at the device to obtain the driver from a manufacturer page on the World Wide Web through the Internet. This partially solves the problem by providing the manufacturer with means for distributing the latest, most up-to-date version of the correct driver, as well as ancillary applications and components for using the device. But the special installation software is particular to a given device, or set of devices from a certain manufacturer. Thus, a different special installation software program must be included on a computer for each device, or each manufacturer of devices. This is inefficient, and it can be practically impossible to include a complete set of special installation software for all manufacturers of all devices a user may wish to install at any time. Further, this solution is difficult to maintain, i.e., it provides no easy way to enable communications between applications and devices for computers that have already been shipped to users without any or all of the specific installation software already installed. Ideally, a user should be able to obtain a correct, up-to-date driver for practically any device when the device is coupled to the user""s computer, without requiring installation software specific to that device to be already installed on the computer.
In accordance with an embodiment of the present invention, the functionality of a device coupled to a computer is enabled by extracting a moniker information stored in the device. At least part of the moniker information is interpreted to determine if a custom handler is installed at the computer. If a custom handler is not installed at the computer, then at least part of the moniker information is interpreted to identify the location of a custom handler. The custom handler is installed, and a custom handler action is performed.